package Server;

import Cliente.OpcionesDelCliente;
import Interfaz.OperacionesInterfaz;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;

public class OpcionesDelServidor {

    public static void recibirDatosUsuarioLogin(PrintWriter salida, BufferedReader entrada) {

        try {
            String usuario = entrada.readLine();
            String password = entrada.readLine();
            salida.println(comprobarSiUsuarioExiste(usuario, password, IniciarServer.dameFicheroUsuarios()));


        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private static String comprobarSiUsuarioExiste(String usuario, String password, String ficheroDeUsuarios) {

        File archivo = new File(ficheroDeUsuarios);
        FileReader fr;
        BufferedReader br;
        String privilegios = null;
        try {
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);
            String linea;
            while ((linea = br.readLine()) != null) {
                if (linea.equals(usuario)) {
                    linea = br.readLine();
                    if (linea.equals(password)) {
                        linea = br.readLine();
                        privilegios = linea;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return privilegios;
    }

    public static void crearUsuarios(String usuario, String password, String privilegios, String ficheroDeUsuarios) {

        File archivo = new File(ficheroDeUsuarios);
        try {
            if (archivo.exists()) {
                FileWriter fw = null;
                BufferedWriter bw = null;
                try {
                    fw = new FileWriter(archivo, true);
                    bw = new BufferedWriter(fw);
                    bw.write(usuario);
                    bw.flush();
                    bw.write('\n');
                    bw.flush();
                    bw.write(password);
                    bw.flush();
                    bw.write('\n');
                    bw.flush();
                    bw.write(privilegios);
                    bw.flush();
                    bw.write('\n');
                    bw.flush();

                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void enviarListaDirectorio(PrintWriter salida, BufferedReader entrada) {

        ArrayList<String> listaDirectorios;
        try {
            listaDirectorios = OperacionesInterfaz.createArrayList(entrada.readLine());
            Iterator iterador = listaDirectorios.iterator();
            while (iterador.hasNext()) {
                salida.println(iterador.next());
                salida.flush();
            }
            salida.println("finDeLista");
            salida.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void enviarDatosFichero(PrintWriter salida, BufferedReader entrada) {
        String directorio;
        try {
            directorio = entrada.readLine();
            File carpeta = new File(directorio);
            File[] listaFicheros = carpeta.listFiles();

            for (int i = 0; i < listaFicheros.length; i++) {

                if (listaFicheros[i].isFile()) {

                    Date fecha = new Date(listaFicheros[i].lastModified());
                    salida.println(listaFicheros[i].getName());
                    salida.flush();
                    salida.println(listaFicheros[i].length() + " Bytes");
                    salida.flush();
                    salida.println(fecha.toString());
                    salida.flush();
                    salida.println(OperacionesInterfaz.mirarPermisos(listaFicheros[i]));
                    salida.flush();
                    salida.println(listaFicheros[i].isHidden());
                    salida.flush();
                }
            }
            salida.println("finDeLista");
            salida.flush();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void descargarArchivo(String nombreArchivo, BufferedReader entrada, PrintWriter salida) {

        File archivo = new File(nombreArchivo);

        if (archivo.isFile()) {
            enviarArchivo(archivo, salida);
        }
    }

    public static void enviarArchivo(File archivo, PrintWriter salida) {
        System.out.println("me meto en enviararchivo");
        BufferedInputStream bis = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(archivo));
            byte[] array = new byte[5120];
            int arrayLength = bis.read(array);
            while (arrayLength > 0) {
                char[] arrayChar = new char[arrayLength];
                for (int i = 0; i < arrayLength; i++) {
                    arrayChar[i] = (char) array[i];
                }
                salida.write(arrayChar);
                salida.flush();
                arrayLength = bis.read(array);
            }
        } catch (Exception e) {
        } finally {
            try {
                bis.close();
            } catch (Exception e) {
            }
        }
    }
    public static void subirArchivo(String nombreArchivo, String directorioDestino, BufferedReader entrada){
        System.out.println("estoy en subirarchivo");
        File directorio = new File(directorioDestino);
        
        if(directorio.isDirectory()){
            System.out.println("estoy en subirarchivo 2222");
            
            OpcionesDelCliente.receiveFile(directorioDestino, nombreArchivo, entrada);
        }
    }
}
